import axios from "axios";
import { MessageBox, Message } from "element-ui";
import store from "@/store";
import { getToken } from "@/utils/auth";
import router from "@/router";
// create an axios instance
const service = axios.create({
  baseURL: process.env.VUE_APP_BASE_API, // url = base url + request url
  // withCredentials: true, // send cookies when cross-domain requests
  timeout: 50000, // request timeout
  headers: {
    "Content-Type": "application/json",
  },
});

// 请求拦截器
service.interceptors.request.use(
  (config) => {
    // 在发送请求之前做些什么

    if (store.getters.token) {
      // 每个请求都携带Token、设备标识、接口版本
      // ['XX-Token'] 是自定义的Headers键
      // console.log(store.getters.token);
      config.headers["Authorization"] = store.getters.token;
      config.headers["XX-Token"] = getToken();
    }
    // 设备标识
    config.headers["XX-Device-Type"] = "pc";
    // 接口版本
    config.headers["XX-Version"] = "v1";
    return config;
  },
  (error) => {
    // 请求错误处理
    // console.log(error);
    return Promise.reject(error);
  }
);

// 响应拦截器
service.interceptors.response.use(
  (response) => {
    // 响应数据
    const res = response.data;
    // console.log(res)
    // 请求成功代码为 0 ，非 0 时表示请求错误
    // if (res.code !== 0) {
    //   Message({
    //     message: res.msg || 'Error',
    //     type: 'error',
    //     duration: 5 * 1000
    //   })

    //   // 11000 未登录，11001 登录过期，11002 登录异常（此为示例，实际状态码与后端确定）
    if (res.code == 401) {
      // 重新登录

      // MessageBox.confirm("已超时，你需要重新登录！", "确定退出", {
      //   confirmButtonText: "重新登录",
      //   cancelButtonText: "确定",
      //   type: "warning",
      // }).then(() => {
      //   store.dispatch("user/logout").then(() => {
      //     location.reload();
      //   });
      // });
      // Message.error("您" + res.message);
      // return Promise.reject("请重新登陆");
    } else if (res.code == 500) {
      // Message.error("请求异常");
      // return Promise.reject("请重新登陆");
    }
    //   return Promise.reject(new Error(res.msg || 'Error'))
    //   // return Promise.reject(new Error(res.msg || 'Error')).catch(err=>{console.log(err)})
    // } else {
    //   return res
    // }
    return res;
  },
  (error) => {
    // console.log("err" + error); // for debug
    // Message({
    //   message: error.message,
    //   type: "error",
    //   duration: 5 * 1000,
    // });
    return Promise.reject(error);
  }
);

export default service;
